﻿
uruchomic gatunek.sql


CREATE SCHEMA tracking;

CREATE TABLE tracking.zlecenie
(
  id serial NOT NULL,
  oem_id	integer,
  numer character varying(255),
  termin timestamp without time zone,
  klient_id integer,
  uwagi character varying(5000),
  CONSTRAINT zlecenie_pk PRIMARY KEY (id),
  CONSTRAINT zlecenie_klient_id_fk FOREIGN KEY (klient_id) REFERENCES oem.klient (id)
);


CREATE TABLE tracking.pozycje_zlecenia
(
  id serial NOT NULL,
  oem_id	integer,
  zlecenie_id integer,
  gatunek_id integer,
  wymiar character varying(255),
  swiadectwo boolean,
  tol_dolna character varying(255),
  tol_gorna character varying(255),
  wydluzenie character varying(255),
  wytrzymalosc_min character varying(255),
  wytrzymalosc_max character varying(255),
  ilosc character varying(255),
  jednostka_miary_id integer,
  uwagi character varying(5000),
  pakowanie_id integer,
  powierzony_material boolean,
  magazyn_id integer,
  CONSTRAINT pozycje_zlecenia_pk PRIMARY KEY (id),
  CONSTRAINT pozycje_zlecenia_jednostka_miary_id_fk FOREIGN KEY (jednostka_miary_id) REFERENCES oem.jednostka_miary (id), 
  CONSTRAINT pozycje_zlecenia_magazyn_id_fk FOREIGN KEY (magazyn_id) REFERENCES oem.magazyn (id),
  CONSTRAINT pozycje_zlecenia_gatunek_id_fk FOREIGN KEY (gatunek_id) REFERENCES oem.gatunek (id),
  CONSTRAINT pozycje_zlecenia_pakowanie_id_fk FOREIGN KEY (pakowanie_id) REFERENCES oem.pakowanie (id),
  CONSTRAINT pozycje_zlecenia_zlecenie_id_fk FOREIGN KEY (zlecenie_id) REFERENCES tracking.zlecenie (id)
);



CREATE OR  REPLACE  FUNCTION oem.tracking (id_zlecenia INTEGER) RETURNS VARCHAR AS
$BODY$
DECLARE
	wynik 							varchar(255);
	row_zlecenia					oem.zlecenie%ROWTYPE;
	tracking_zlecenia_id 			integer;
	row_pozycji_zlecenia 			oem.pozycje_zlecenia%ROWTYPE;
	tracking_pozycji_zlecenia_id 	integer;
	row_schematu 					oem.schemat_produkcji%ROWTYPE;
	tracking_schematu_id 			integer;
	row_pozycji_schematu 			oem.pozycje_schematu_produkcji%ROWTYPE;
	tracking_pozycji_schematu_id 	integer;
	row_maszyna_pozycji_schematu		oem.maszyna_pozycji_schematu%ROWTYPE;
BEGIN

---------------------------------ZLECENIE--------------------------------------------------------------------------------------------------------------------------------
	SELECT * INTO row_zlecenia FROM oem.zlecenie WHERE zlecenie.id = id_zlecenia;

	UPDATE oem.zlecenie SET tracking = 1, status_id = 2 WHERE zlecenie.id = id_zlecenia;
	INSERT INTO tracking.zlecenie (oem_id, numer, termin, klient_id, uwagi) VALUES (row_zlecenia.id, row_zlecenia.numer, row_zlecenia.termin, row_zlecenia.klient_id, row_zlecenia.uwagi) RETURNING id INTO tracking_zlecenia_id;

---------------------------------POZYCJE ZLECENIA-------------------------------------------------------------------------------------------------------------------------
	FOR row_pozycji_zlecenia IN SELECT * FROM oem.pozycje_zlecenia WHERE pozycje_zlecenia.zlecenie_id = id_zlecenia
	LOOP
		INSERT INTO tracking.pozycje_zlecenia (oem_id, zlecenie_id, gatunek_id, wymiar, swiadectwo, tol_dolna, tol_gorna, wydluzenie, wytrzymalosc_min, wytrzymalosc_max, ilosc, jednostka_miary_id, uwagi, pakowanie_id, powierzony_material, magazyn_id) VALUES (row_pozycji_zlecenia.id, tracking_zlecenia_id, row_pozycji_zlecenia.gatunek_id, row_pozycji_zlecenia.wymiar, row_pozycji_zlecenia.swiadectwo, row_pozycji_zlecenia.tol_dolna, row_pozycji_zlecenia.tol_gorna, row_pozycji_zlecenia.wydluzenie, row_pozycji_zlecenia.wytrzymalosc_min, row_pozycji_zlecenia.wytrzymalosc_max, row_pozycji_zlecenia.ilosc, row_pozycji_zlecenia.jednostka_miary_id, row_pozycji_zlecenia.uwagi, row_pozycji_zlecenia.pakowanie_id, row_pozycji_zlecenia.powierzony_material, row_pozycji_zlecenia.magazyn_id) RETURNING id INTO tracking_pozycji_zlecenia_id;
		---------------------------------SCHEMAT PRODUKCJI--------------------------------------------------------------------------------------------------------
		 FOR row_schematu IN SELECT * FROM oem.schemat_produkcji WHERE schemat_produkcji.pozycje_zlecenia_id = row_pozycji_zlecenia.id
		LOOP
			INSERT INTO tracking.schemat (oem_id, pozycje_zlecenia_id, pracownik_id, data_utworzenia, uwagi, ilosc) VALUES (row_schematu.id, tracking_pozycji_zlecenia_id, row_schematu.pracownik_id, row_schematu.data_utworzenia, row_schematu.uwagi, row_schematu.ilosc) RETURNING id INTO tracking_schematu_id;
			----------------------POZYCJE SCHEMATU------------------------------------------------------------------------------------------------------------
			FOR row_pozycji_schematu IN SELECT * FROM oem.pozycje_schematu_produkcji WHERE pozycje_schematu_produkcji.schemat_produkcji_id = row_schematu.id
			LOOP
				INSERT INTO tracking.pozycje_schematu (oem_id, schemat_id, pracownik_id, pakowanie_id, wymiar_wejsciowy, wymiar_koncowy, uwagi, grupa_maszyny_id) VALUES (row_pozycji_schematu.id, tracking_schematu_id, row_pozycji_schematu.pracownik_id, row_pozycji_schematu.pakowanie_id, row_pozycji_schematu.wymiar_wejsciowy, row_pozycji_schematu.wymiar_koncowy, row_pozycji_schematu.uwagi, row_pozycji_schematu.grupa_maszyny_id) RETURNING id INTO tracking_pozycji_schematu_id;
				----------------------MASZYNY POZYCJI SCHEMATU------------------------------------------------------------------------------------------------------------
				FOR row_maszyna_pozycji_schematu IN SELECT * FROM oem.maszyna_pozycji_schematu WHERE maszyna_pozycji_schematu.pozycje_schematu_produkcji_id = row_pozycji_schematu.id
				LOOP
					INSERT INTO tracking.maszyna_pozycji_schematu (oem_id, pozycje_schematu_id, maszyna_id) VALUES (row_maszyna_pozycji_schematu.id, tracking_pozycji_schematu_id, row_maszyna_pozycji_schematu.maszyna_id);
				END LOOP;
			END LOOP;
		END LOOP;
	END LOOP;	
	wynik:= row_zlecenia.numer;
	RETURN wynik;
END;
$BODY$
  LANGUAGE plpgsql;


----------------------------------------------------------------------------------------------------------------------
  --2.07.
CREATE TABLE tracking.schemat
(
	id 			SERIAL,
	oem_id			INTEGER,
	pozycje_zlecenia_id	INTEGER,
	pracownik_id		INTEGER,
	data_utworzenia 	TIMESTAMP,
	uwagi			VARCHAR(5000),
	ilosc			DOUBLE PRECISION,
	CONSTRAINT schemat_produkcji_pk PRIMARY KEY (id),
	CONSTRAINT schemat_produkcji_pozycje_zlecenia_id_fk FOREIGN KEY (pozycje_zlecenia_id) REFERENCES tracking.pozycje_zlecenia,
	CONSTRAINT schemat_produkcji_pracownik_id_fk FOREIGN KEY (pracownik_id) REFERENCES oem.pracownik
);


CREATE TABLE tracking.pozycje_schematu
(
	id 			SERIAL,
	oem_id			INTEGER,
	schemat_id		INTEGER,
	pracownik_id		INTEGER,
	pakowanie_id		INTEGER,
	wymiar_wejsciowy 	DOUBLE PRECISION,
	wymiar_koncowy		DOUBLE PRECISION,
	uwagi			VARCHAR(5000),
	grupa_maszyny_id  INTEGER,
	CONSTRAINT pozycje_schematu_pk PRIMARY KEY (id),
	CONSTRAINT pozycje_schematu_schemat_id_fk FOREIGN KEY (schemat_id) REFERENCES tracking.schemat,
	CONSTRAINT pozycje_schematu_pracownik_id_fk FOREIGN KEY (pracownik_id) REFERENCES oem.pracownik,
	CONSTRAINT pozycje_schematu_pakowanie_id_fk FOREIGN KEY (pakowanie_id) REFERENCES oem.pakowanie,
	CONSTRAINT pozycje_schematu_grupa_maszyny_id_fk FOREIGN KEY (grupa_maszyny_id) REFERENCES oem.grupa_maszyny
);

CREATE TABLE tracking.maszyna_pozycji_schematu
(
	id 			SERIAL,
	oem_id			INTEGER,
	pozycje_schematu_id	INTEGER,
	maszyna_id		INTEGER,	
	CONSTRAINT maszyna_pozycji_schematu_pk PRIMARY KEY (id),
	CONSTRAINT maszyna_pozycji_schematu_pozycje_schematu_id_fk FOREIGN KEY (pozycje_schematu_id) REFERENCES tracking.pozycje_schematu,
	CONSTRAINT maszyna_pozycji_schematu_maszyna_id_fk FOREIGN KEY (maszyna_id) REFERENCES oem.maszyna
);

-------------------------------------------------------------------------------------
--8.07.
CREATE TABLE tracking.material_produkcyjny
(
	id 			SERIAL,
	schemat_id			INTEGER,
	wymiar				DOUBLE PRECISION,
	ilosc				DOUBLE PRECISION,
	pracownik_id		INTEGER,	
	pakowanie_id		INTEGER,
	material_id			INTEGER,
	data_utworzenia		TIMESTAMP,
	CONSTRAINT material_produkcyjny_pk PRIMARY KEY (id),
	CONSTRAINT material_produkcyjny_schemat_id_fk FOREIGN KEY (schemat_id) REFERENCES tracking.schemat,
	CONSTRAINT material_produkcyjny_pracownik_id_fk FOREIGN KEY (pracownik_id) REFERENCES oem.pracownik,
	CONSTRAINT material_produkcyjny_pakowanie_id_fk FOREIGN KEY (pakowanie_id) REFERENCES oem.pakowanie,
	CONSTRAINT material_produkcyjny_material_id_fk FOREIGN KEY (material_id) REFERENCES oem.material
);

--------------------------WYKONANE 17.07.2013R.-------------------------------------------------------------------------------------------

--29.07
ALTER TABLE tracking.zlecenie ADD COLUMN data_zamowienia TIMESTAMP;
ALTER TABLE tracking.zlecenie ADD COLUMN status_id INTEGER;
ALTER TABLE tracking.zlecenie ADD CONSTRAINT zlecenie_status_id_fk FOREIGN KEY (status_id) REFERENCES oem.status;

  --30.07
ALTER TABLE tracking.schemat ADD COLUMN pracownik_zmiany_id INTEGER;
ALTER TABLE tracking.schemat ADD COLUMN data_zmiany TIMESTAMP;

ALTER TABLE tracking.schemat ADD CONSTRAINT schemat_pracownik_zmiany_id_fk FOREIGN KEY (pracownik_zmiany_id) REFERENCES oem.pracownik;

CREATE OR  REPLACE  FUNCTION oem.tracking (id_zlecenia INTEGER) RETURNS VARCHAR AS
$BODY$
DECLARE
	wynik 							varchar(255);
	row_zlecenia					oem.zlecenie%ROWTYPE;
	tracking_zlecenia_id 			integer;
	row_pozycji_zlecenia 			oem.pozycje_zlecenia%ROWTYPE;
	tracking_pozycji_zlecenia_id 	integer;
	row_schematu 					oem.schemat_produkcji%ROWTYPE;
	tracking_schematu_id 			integer;
	row_pozycji_schematu 			oem.pozycje_schematu_produkcji%ROWTYPE;
	tracking_pozycji_schematu_id 	integer;
	row_maszyna_pozycji_schematu	oem.maszyna_pozycji_schematu%ROWTYPE;
BEGIN

---------------------------------ZLECENIE--------------------------------------------------------------------------------------------------------------------------------
	SELECT * INTO row_zlecenia FROM oem.zlecenie WHERE zlecenie.id = id_zlecenia;

	UPDATE oem.zlecenie SET tracking = 1, status_id = 2 WHERE zlecenie.id = id_zlecenia;
	INSERT INTO tracking.zlecenie (oem_id, numer, termin, klient_id, uwagi, data_zamowienia, status_id) VALUES (row_zlecenia.id, row_zlecenia.numer, row_zlecenia.termin, row_zlecenia.klient_id, row_zlecenia.uwagi, row_zlecenia.data_zamowienia, 1) RETURNING id INTO tracking_zlecenia_id;

---------------------------------POZYCJE ZLECENIA-------------------------------------------------------------------------------------------------------------------------
	FOR row_pozycji_zlecenia IN SELECT * FROM oem.pozycje_zlecenia WHERE pozycje_zlecenia.zlecenie_id = id_zlecenia
	LOOP
		INSERT INTO tracking.pozycje_zlecenia (oem_id, zlecenie_id, gatunek_id, wymiar, swiadectwo, tol_dolna, tol_gorna, wydluzenie, wytrzymalosc_min, wytrzymalosc_max, ilosc, jednostka_miary_id, uwagi, pakowanie_id, powierzony_material, magazyn_id, status_id) VALUES (row_pozycji_zlecenia.id, tracking_zlecenia_id, row_pozycji_zlecenia.gatunek_id, row_pozycji_zlecenia.wymiar, row_pozycji_zlecenia.swiadectwo, row_pozycji_zlecenia.tol_dolna, row_pozycji_zlecenia.tol_gorna, row_pozycji_zlecenia.wydluzenie, row_pozycji_zlecenia.wytrzymalosc_min, row_pozycji_zlecenia.wytrzymalosc_max, row_pozycji_zlecenia.ilosc, row_pozycji_zlecenia.jednostka_miary_id, row_pozycji_zlecenia.uwagi, row_pozycji_zlecenia.pakowanie_id, row_pozycji_zlecenia.powierzony_material, row_pozycji_zlecenia.magazyn_id, 1) RETURNING id INTO tracking_pozycji_zlecenia_id;
		---------------------------------SCHEMAT PRODUKCJI--------------------------------------------------------------------------------------------------------
		FOR row_schematu IN SELECT * FROM oem.schemat_produkcji WHERE schemat_produkcji.pozycje_zlecenia_id = row_pozycji_zlecenia.id
		LOOP
			INSERT INTO tracking.schemat (oem_id, pozycje_zlecenia_id, pracownik_id, data_utworzenia, uwagi, ilosc, pracownik_zmiany_id, data_zmiany) VALUES (row_schematu.id, tracking_pozycji_zlecenia_id, row_schematu.pracownik_id, row_schematu.data_utworzenia, row_schematu.uwagi, row_schematu.ilosc, row_schematu.pracownik_zmiany_id, row_schematu.data_zmiany) RETURNING id INTO tracking_schematu_id;
			----------------------POZYCJE SCHEMATU------------------------------------------------------------------------------------------------------------
			FOR row_pozycji_schematu IN SELECT * FROM oem.pozycje_schematu_produkcji WHERE pozycje_schematu_produkcji.schemat_produkcji_id = row_schematu.id
			LOOP
				INSERT INTO tracking.pozycje_schematu (oem_id, schemat_id, pracownik_id, pakowanie_id, wymiar_wejsciowy, wymiar_koncowy, uwagi, grupa_maszyny_id) VALUES (row_pozycji_schematu.id, tracking_schematu_id, row_pozycji_schematu.pracownik_id, row_pozycji_schematu.pakowanie_id, row_pozycji_schematu.wymiar_wejsciowy, row_pozycji_schematu.wymiar_koncowy, row_pozycji_schematu.uwagi, row_pozycji_schematu.grupa_maszyny_id) RETURNING id INTO tracking_pozycji_schematu_id;
				----------------------MASZYNY POZYCJI SCHEMATU------------------------------------------------------------------------------------------------------------
				FOR row_maszyna_pozycji_schematu IN SELECT * FROM oem.maszyna_pozycji_schematu WHERE maszyna_pozycji_schematu.pozycje_schematu_produkcji_id = row_pozycji_schematu.id
				LOOP
					INSERT INTO tracking.maszyna_pozycji_schematu (oem_id, pozycje_schematu_id, maszyna_id) VALUES (row_maszyna_pozycji_schematu.id, tracking_pozycji_schematu_id, row_maszyna_pozycji_schematu.maszyna_id);
				END LOOP;
			END LOOP;
		END LOOP;
	END LOOP;	
	wynik:= row_zlecenia.numer;
	RETURN wynik;
END;
$BODY$
  LANGUAGE plpgsql;

  --31.07

  
CREATE OR REPLACE FUNCTION tracking.wydruk_schematu(id_schematu integer)
  RETURNS character varying AS
$BODY$
DECLARE
	klucz 							TIMESTAMP;
	row_zlecenie					tracking.zlecenie%ROWTYPE;
	nazwa_klient					VARCHAR;
	row_pozycji_zlecenia 			tracking.pozycje_zlecenia%ROWTYPE;
	nazwa_material					VARCHAR;
	nazwa_magazyn					VARCHAR;
	nazwa_jednostka					VARCHAR;
	nazwa_pakowanie_poz_zlecenia	VARCHAR;
	row_schematu_produkcji 			tracking.schemat%ROWTYPE;
	row_pozycji_schematu 			tracking.pozycje_schematu%ROWTYPE;
	nazwa_grupa 					VARCHAR;
	nazwa_pakowanie 				VARCHAR;
	nazwa_pracownik 				VARCHAR;
	row_maszyny 					oem.maszyna%ROWTYPE;
	wynik 							VARCHAR;
BEGIN

	klucz := now();

---------------------------------ZLECENIE--------------------------------------------------------------------------------------------------------------------------------
	SELECT * INTO row_zlecenie FROM tracking.zlecenie, tracking.pozycje_zlecenia, tracking.schemat WHERE zlecenie.id = pozycje_zlecenia.zlecenie_id AND pozycje_zlecenia.id = schemat.pozycje_zlecenia_id AND schemat.id = id_schematu; 
--KLIENT
	SELECT nazwa_skrocona INTO nazwa_klient FROM oem.klient WHERE id = row_zlecenie.klient_id;
	
---------------------------------POZYCJE ZLECENIA--------------------------------------------------------------------------------------------------------------------------------
	SELECT *  INTO row_pozycji_zlecenia FROM tracking.pozycje_zlecenia, tracking.schemat WHERE pozycje_zlecenia.id = schemat.pozycje_zlecenia_id AND schemat.id = id_schematu;
--MATERIAL
	SELECT nazwa_ang INTO nazwa_material FROM oem.gatunek WHERE id = row_pozycji_zlecenia.gatunek_id;
--MAGAZYN
	SELECT nazwa INTO nazwa_magazyn FROM oem.magazyn WHERE id = row_pozycji_zlecenia.magazyn_id;
--JEDNOSTKA
	SELECT jednostka INTO nazwa_jednostka FROM oem.jednostka_miary WHERE id = row_pozycji_zlecenia.jednostka_miary_id;
--PAKOWANIE
	SELECT nazwa INTO nazwa_pakowanie_poz_zlecenia FROM oem.pakowanie WHERE id = row_pozycji_zlecenia.pakowanie_id;

	
---------------------------------SCHEMAT PRODUKCJI--------------------------------------------------------------------------------------------------------------------------------

	  SELECT * INTO row_schematu_produkcji FROM tracking.schemat WHERE schemat.id = id_schematu;

-----------------------------------------------------------POZYCJE SCHEMATU--------------------------------------------------------------------------------------------------------------------------------
	FOR row_pozycji_schematu IN SELECT * FROM tracking.pozycje_schematu WHERE pozycje_schematu.schemat_id = row_schematu_produkcji.id
	LOOP
--GRUPA MASZYNY
	SELECT nazwa INTO nazwa_grupa FROM oem.grupa_maszyny WHERE id = row_pozycji_schematu.grupa_maszyny_id;	
--MASZYNA
	wynik := '';
	FOR row_maszyny IN SELECT * FROM oem.maszyna, tracking.maszyna_pozycji_schematu WHERE maszyna_pozycji_schematu.pozycje_schematu_id = row_pozycji_schematu.id AND maszyna_pozycji_schematu.maszyna_id = maszyna.id 
	LOOP
		IF wynik <> '' THEN
			wynik := wynik || ', ';
		END IF;
		wynik := wynik || row_maszyny.nazwa;
	END LOOP;
--PAKOWANIE
	SELECT nazwa INTO nazwa_pakowanie FROM oem.pakowanie WHERE id = row_pozycji_schematu.pakowanie_id;
--PRACOWNIK
	SELECT nazwisko INTO nazwa_pracownik FROM oem.pracownik WHERE id = row_pozycji_schematu.pracownik_id;


--WSTAWIENIE INFORMACJI DO TABELI
	INSERT INTO oem.tmp_wydruk_schematu (klucz, klient, termin_realizacji, id_pozycji_zlecenia, gatunek_materialu, magazyn, material_powierzony, wymiar, ilosc, jednostka, tol_dolna, tol_gorna, wytrzymalosc_min, wytrzymalosc_max, wydluzenie, pakowanie_pozycja_zlecenia, uwagi_pozycja_zlecenia, id_schematu_produkcji, uwagi_schematu_produkcji, ilosc_schematu_produkcji, id_pozycji_schematu, grupa_maszyny, maszyna, wymiar_wejsciowy, wymiar_koncowy, pakowanie, pracownik, uwagi_pozycji_schematu)
	 VALUES (klucz, nazwa_klient, row_zlecenie.termin, 
			row_pozycji_zlecenia.id, nazwa_material, nazwa_magazyn, row_pozycji_zlecenia.powierzony_material, row_pozycji_zlecenia.wymiar,
			row_pozycji_zlecenia.ilosc, nazwa_jednostka, row_pozycji_zlecenia.tol_dolna, row_pozycji_zlecenia.tol_gorna, row_pozycji_zlecenia.wytrzymalosc_min, row_pozycji_zlecenia.wytrzymalosc_max,
			row_pozycji_zlecenia.wydluzenie, nazwa_pakowanie_poz_zlecenia, row_pozycji_zlecenia.uwagi,
			row_schematu_produkcji.id, row_schematu_produkcji.uwagi, row_schematu_produkcji.ilosc,
			row_pozycji_schematu.id, nazwa_grupa, wynik, row_pozycji_schematu.wymiar_wejsciowy, row_pozycji_schematu.wymiar_koncowy, nazwa_pakowanie, nazwa_pracownik, row_pozycji_schematu.uwagi);	
	END LOOP;
	RETURN klucz;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION tracking.wydruk_schematu(integer)
  OWNER TO postgres;


  ALTER TABLE tracking.pozycje_zlecenia ADD COLUMN status_id INTEGER;
ALTER TABLE tracking.pozycje_zlecenia ADD CONSTRAINT pozycje_zlecenia_status_id_fk FOREIGN KEY (status_id) REFERENCES oem.status;

--01.08
UPDATE tracking.pozycje_zlecenia SET status_id = 1;

--------------------------WYKONANE 1.08.2013R.-------------------------------------------------------------------------------------------

--02.08.
	ALTER TABLE tracking.zlecenie ADD COLUMN data_zmiany TIMESTAMP;
	ALTER TABLE tracking.pozycje_zlecenia ADD COLUMN data_zmiany TIMESTAMP;

--08.08

ALTER TABLE tracking.maszyna_pozycji_schematu ADD COLUMN szereg BOOLEAN;


--------------------------WYKONANE 08.08.2013R.-------------------------------------------------------------------------------------------
 
 --28.08.

 ALTER TABLE tracking.material_produkcyjny RENAME COLUMN wymiar TO wymiar_min;
 ALTER TABLE tracking.material_produkcyjny ADD COLUMN wymiar_max DOUBLE PRECISION;
 ALTER TABLE tracking.material_produkcyjny ADD COLUMN wytrzymalosc DOUBLE PRECISION;

 --3.09
 CREATE TABLE tracking.opcja
(
  id serial NOT NULL,
  nazwa character varying(255),
  CONSTRAINT opcja_pk PRIMARY KEY (id)
);

INSERT INTO tracking.opcja (nazwa) VALUES ('produkcja');
INSERT INTO tracking.opcja (nazwa) VALUES ('magazyn');
INSERT INTO tracking.opcja (nazwa) VALUES ('kosz');
INSERT INTO tracking.opcja (nazwa) VALUES ('kontrola');



CREATE TABLE tracking.drut
(
  id serial NOT NULL,
  data_utworzenia timestamp,
  pozycje_schematu_id integer,
  pracownik_id integer,
  maszyna_id integer,
  pakowanie_id integer,
  wymiar_min double precision,
  wymiar_max double precision,
  uwagi character varying(5000),
  opcja_id integer,
  parametr_maszyny double precision,
  CONSTRAINT drut_pk PRIMARY KEY (id),
  CONSTRAINT drut_pozycje_schematu_id_fk FOREIGN KEY (pozycje_schematu_id) REFERENCES tracking.pozycje_schematu (id), 
  CONSTRAINT drut_pracownik_id_fk FOREIGN KEY (pracownik_id) REFERENCES oem.pracownik (id),
  CONSTRAINT drut_pakowanie_id_fk FOREIGN KEY (pakowanie_id) REFERENCES oem.pakowanie (id),
  CONSTRAINT drut_maszyna_id_fk FOREIGN KEY (maszyna_id ) REFERENCES oem.maszyna (id),
  CONSTRAINT drut_opcja_id_fk FOREIGN KEY (opcja_id ) REFERENCES tracking.opcja (id)
);

CREATE TABLE tracking.rodzic
(
  id serial NOT NULL,
  drut_id	integer,
  drut_rodzic_id	integer,
  wyzn_material_produkcyjny boolean,
  waga double precision,
  CONSTRAINT rodzic_pk PRIMARY KEY (id),
  CONSTRAINT rodzic_drut_id_fk FOREIGN KEY (drut_id) REFERENCES tracking.drut (id)
);

--------------------------WYKONANE 12.09.2013R.-------------------------------------------------------------------------------------------
 
 --24.09
 ALTER TABLE tracking.maszyna_pozycji_schematu DROP COLUMN oem_id CASCADE; 
ALTER TABLE tracking.pozycje_schematu DROP COLUMN oem_id CASCADE; 
ALTER TABLE tracking.schemat DROP COLUMN oem_id CASCADE; 

--26.09
INSERT INTO tracking.opcja (nazwa) VALUES ('poprawa');

CREATE TABLE tracking.kontrola
(
  id serial NOT NULL,
  drut_id	integer,
  wymiar_min	double precision,
  wymiar_max	double precision,
    ilosc 	double precision,
  pakowanie_id 	integer,
  opcja_id	integer,
  pracownik_id 	integer,
  data_utworzenia timestamp,
  uwagi		VARCHAR(5000),
    zwick_ustawienie double precision,
    zwick_pomiar double precision,
    zwick_sila double precision,
    zwick_procent_wydluzenia double precision,
    zwick_wytrzymalosc double precision,
  CONSTRAINT kontrola_pk PRIMARY KEY (id),
  CONSTRAINT kontrola_drut_id_fk FOREIGN KEY (drut_id) REFERENCES tracking.drut (id),
  CONSTRAINT kontrola_pakowanie_id_fk FOREIGN KEY (pakowanie_id) REFERENCES oem.pakowanie (id),
  CONSTRAINT kontrola_opcja_id_fk FOREIGN KEY (opcja_id) REFERENCES tracking.opcja (id),
  CONSTRAINT kontrola_pracownik_id_fk FOREIGN KEY (pracownik_id) REFERENCES oem.pracownik (id)
);

--28.09
INSERT INTO tracking.opcja (nazwa) VALUES ('gotowy');
INSERT INTO tracking.opcja (nazwa) VALUES ('magazyn_2');
INSERT INTO tracking.opcja (nazwa) VALUES ('wysyłka');

--------------------------WYKONANE 2.10.2013R.-------------------------------------------------------------------------------------------
--3.10
 CREATE TABLE tracking.zwick_ustawienie
(
  id serial NOT NULL,
  nazwa character varying(255),
  CONSTRAINT zwick_ustawienie_pk PRIMARY KEY (id)
);

INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('2');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('10');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('20');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('200');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('500');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('1000');
INSERT INTO tracking.zwick_ustawienie (nazwa) VALUES ('2000');

--4.10
UWAGA należy zmienic w bazie danych warosci dla zwick_ustawieni_id 

ALTER TABLE tracking.kontrola  RENAME zwick_ustawienie TO zwick_ustawienie_id;

ALTER TABLE tracking.kontrola  ALTER COLUMN zwick_ustawienie_id TYPE INTEGER;

ALTER TABLE tracking.kontrola ADD CONSTRAINT kontrola_zwick_ustawienie_id_fk FOREIGN KEY (zwick_ustawienie_id) REFERENCES tracking.zwick_ustawienie;

--7.10
 CREATE TABLE tracking.opcja_pozycji_schematu
(
  id serial NOT NULL,
  nazwa character varying(255),
  CONSTRAINT opcja_pozycji_schematu_pk PRIMARY KEY (id)
);

INSERT INTO tracking.opcja_pozycji_schematu (nazwa) VALUES ('pobranie z magazynu');
INSERT INTO tracking.opcja_pozycji_schematu (nazwa) VALUES ('operacja');
INSERT INTO tracking.opcja_pozycji_schematu (nazwa) VALUES ('poprawa');


ALTER TABLE tracking.pozycje_schematu  ADD COLUMN opcja_pozycji_schematu_id INTEGER;
ALTER TABLE tracking.pozycje_schematu ADD CONSTRAINT pozycje_schematu_opcja_pozycji_schematu_id_fk FOREIGN KEY (opcja_pozycji_schematu_id) REFERENCES tracking.opcja_pozycji_schematu;

UPDATE tracking.pozycje_schematu SET opcja_pozycji_schematu_id = 1 WHERE wymiar_koncowy is null;
UPDATE tracking.pozycje_schematu SET opcja_pozycji_schematu_id = 2 WHERE wymiar_koncowy is not null;

--8.10
ALTER TABLE tracking.kontrola DROP CONSTRAINT kontrola_pakowanie_id_fk;

 CREATE TABLE tracking.opcje_poprawy
(
  id serial NOT NULL,
  nazwa character varying(255),
  CONSTRAINT opcje_poprawy_pk PRIMARY KEY (id)
);

INSERT INTO tracking.opcje_poprawy (nazwa) VALUES ('luźno nawinięty');
INSERT INTO tracking.opcje_poprawy (nazwa) VALUES ('krzywo nawinięty');
INSERT INTO tracking.opcje_poprawy (nazwa) VALUES ('wystajace końcówki');


--15.10
-- Function: tracking.wydruk_schematu(integer)

-- DROP FUNCTION tracking.wydruk_schematu(integer);

CREATE OR REPLACE FUNCTION tracking.wydruk_schematu(id_schematu integer)
  RETURNS character varying AS
$BODY$
DECLARE
	klucz 							TIMESTAMP;
	row_zlecenie					tracking.zlecenie%ROWTYPE;
	nazwa_klient					VARCHAR;
	row_pozycji_zlecenia 			tracking.pozycje_zlecenia%ROWTYPE;
	nazwa_material					VARCHAR;
	nazwa_magazyn					VARCHAR;
	nazwa_jednostka					VARCHAR;
	nazwa_pakowanie_poz_zlecenia	VARCHAR;
	row_schematu_produkcji 			tracking.schemat%ROWTYPE;
	row_pozycji_schematu 			tracking.pozycje_schematu%ROWTYPE;
	nazwa_grupa 					VARCHAR;
	nazwa_pakowanie 				VARCHAR;
	nazwa_pracownik 				VARCHAR;
	row_maszyny 					oem.maszyna%ROWTYPE;
	wynik 							VARCHAR;
BEGIN

	klucz := now();

---------------------------------ZLECENIE--------------------------------------------------------------------------------------------------------------------------------
	SELECT * INTO row_zlecenie FROM tracking.zlecenie, tracking.pozycje_zlecenia, tracking.schemat WHERE zlecenie.id = pozycje_zlecenia.zlecenie_id AND pozycje_zlecenia.id = schemat.pozycje_zlecenia_id AND schemat.id = id_schematu; 
--KLIENT
	SELECT nazwa_skrocona INTO nazwa_klient FROM oem.klient WHERE id = row_zlecenie.klient_id;
	
---------------------------------POZYCJE ZLECENIA--------------------------------------------------------------------------------------------------------------------------------
	SELECT *  INTO row_pozycji_zlecenia FROM tracking.pozycje_zlecenia, tracking.schemat WHERE pozycje_zlecenia.id = schemat.pozycje_zlecenia_id AND schemat.id = id_schematu;
--MATERIAL
	SELECT nazwa_ang INTO nazwa_material FROM oem.gatunek WHERE id = row_pozycji_zlecenia.gatunek_id;
--MAGAZYN
	SELECT nazwa INTO nazwa_magazyn FROM oem.magazyn WHERE id = row_pozycji_zlecenia.magazyn_id;
--JEDNOSTKA
	SELECT jednostka INTO nazwa_jednostka FROM oem.jednostka_miary WHERE id = row_pozycji_zlecenia.jednostka_miary_id;
--PAKOWANIE
	SELECT nazwa INTO nazwa_pakowanie_poz_zlecenia FROM oem.pakowanie WHERE id = row_pozycji_zlecenia.pakowanie_id;

	
---------------------------------SCHEMAT PRODUKCJI--------------------------------------------------------------------------------------------------------------------------------

	  SELECT * INTO row_schematu_produkcji FROM tracking.schemat WHERE schemat.id = id_schematu;

-----------------------------------------------------------POZYCJE SCHEMATU--------------------------------------------------------------------------------------------------------------------------------
	FOR row_pozycji_schematu IN SELECT * FROM tracking.pozycje_schematu WHERE pozycje_schematu.schemat_id = row_schematu_produkcji.id ORDER BY pozycje_schematu.id 
	LOOP
--GRUPA MASZYNY
	SELECT nazwa INTO nazwa_grupa FROM oem.grupa_maszyny WHERE id = row_pozycji_schematu.grupa_maszyny_id;	
--MASZYNA
	wynik := '';
	FOR row_maszyny IN SELECT * FROM oem.maszyna, tracking.maszyna_pozycji_schematu WHERE maszyna_pozycji_schematu.pozycje_schematu_id = row_pozycji_schematu.id AND maszyna_pozycji_schematu.maszyna_id = maszyna.id 
	LOOP
		IF wynik <> '' THEN
			wynik := wynik || ', ';
		END IF;
		wynik := wynik || row_maszyny.nazwa;
	END LOOP;
--PAKOWANIE
	SELECT nazwa INTO nazwa_pakowanie FROM oem.pakowanie WHERE id = row_pozycji_schematu.pakowanie_id;
--PRACOWNIK
	SELECT nazwisko INTO nazwa_pracownik FROM oem.pracownik WHERE id = row_pozycji_schematu.pracownik_id;


--WSTAWIENIE INFORMACJI DO TABELI
	INSERT INTO oem.tmp_wydruk_schematu (klucz, klient, termin_realizacji, id_pozycji_zlecenia, gatunek_materialu, magazyn, material_powierzony, wymiar, ilosc, jednostka, tol_dolna, tol_gorna, wytrzymalosc_min, wytrzymalosc_max, wydluzenie, pakowanie_pozycja_zlecenia, uwagi_pozycja_zlecenia, id_schematu_produkcji, uwagi_schematu_produkcji, ilosc_schematu_produkcji, id_pozycji_schematu, grupa_maszyny, maszyna, wymiar_wejsciowy, wymiar_koncowy, pakowanie, pracownik, uwagi_pozycji_schematu)
	 VALUES (klucz, nazwa_klient, row_zlecenie.termin, 
			row_pozycji_zlecenia.id, nazwa_material, nazwa_magazyn, row_pozycji_zlecenia.powierzony_material, row_pozycji_zlecenia.wymiar,
			row_pozycji_zlecenia.ilosc, nazwa_jednostka, row_pozycji_zlecenia.tol_dolna, row_pozycji_zlecenia.tol_gorna, row_pozycji_zlecenia.wytrzymalosc_min, row_pozycji_zlecenia.wytrzymalosc_max,
			row_pozycji_zlecenia.wydluzenie, nazwa_pakowanie_poz_zlecenia, row_pozycji_zlecenia.uwagi,
			row_schematu_produkcji.id, row_schematu_produkcji.uwagi, row_schematu_produkcji.ilosc,
			row_pozycji_schematu.id, nazwa_grupa, wynik, row_pozycji_schematu.wymiar_wejsciowy, row_pozycji_schematu.wymiar_koncowy, nazwa_pakowanie, nazwa_pracownik, row_pozycji_schematu.uwagi);	
	END LOOP;
	RETURN klucz;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
  
 --------------------------WYKONANE 15.10.2013R.-------------------------------------------------------------------------------------------
 
 --18.10
 ALTER TABLE tracking.kontrola ADD COLUMN kto_zatwierdzil_pracownik_id INTEGER;

  --------------------------WYKONANE 25.10.2013R.-------------------------------------------------------------------------------------------
 
 --27.11
 CREATE TABLE tracking.statystyki_pracownicy
(
	id 		SERIAL,
	pracownik_id 	INTEGER,
	wartosc		DOUBLE PRECISION,
	CONSTRAINT statystyki_pracownicy_pk PRIMARY KEY (id)
);
  --------------------------WYKONANE 6.12.2013R.-------------------------------------------------------------------------------------------
 
--12.12
ALTER TABLE tracking.pozycje_schematu ADD COLUMN status_id INTEGER; 
ALTER TABLE tracking.pozycje_schematu ADD CONSTRAINT pozycje_schematu_status_id_fk FOREIGN KEY (status_id) REFERENCES oem.status;
UPDATE tracking.pozycje_schematu
SET status_id = 1;

--------------------------WYKONANE 20.02.2013R.-------------------------------------------------------------------------------------------
